'''
项目介绍:商城类智能助手

项目功能：
1. 智能助手
2. 智能助手调用数据库
3. 智能助手调用工具

本代码需要调用函数Connect_Sql.py中的函数query_by_product_name
Code by Zyy

2025.10.1更新
完善了agent调用工具的历史对话回传
By Zyy
'''

from openai import OpenAI
import json 
import Connect_Sql
# 创建OpenAI对象
client = OpenAI(
    base_url='http://localhost:11434/v1/',
    api_key='zyy'
)
print('欢迎来到UpDownSeek商城')
# 创建消息列表
messages = [
  {'role':'system','content':'你是UpDownSeek商城助手，致力于为客户提供有用的信息和帮助。用中文回答客户问题。'},
]
# 定义查询函数调用的JSON Schema
Json_Schema = {
            'name':'query_by_product_name', #函数名称
            'description':'查询数据库来检索匹配包含指定产品名称的产品列表。此功能可用于帮助客户按名称查找产品，当用户询问某类产品还有吗，你们这边都有什么xx产品等，可以使用这个功能来查询是否有该产品', #函数描述
            'parameters':{ #函数参数
                'type':'object', #参数类型
                'properties':{ #参数名称
                    'product_name':{ #query_by_product_name函数的参数名称
                        'type':'string', #参数类型
                        'description':'你要要搜索的产品名称。' #参数描述
                    }
                },
                'required':['product_name'] #如果调用该函数的话，必须要上传该参数
            }
  }
# 创建工具列表
tools = [{
  'type':'function',
  'function':Json_Schema
}]
while True:
  prompt = input('用户输入：')
  if prompt.lower() in ['打印历史对话']:
    print(messages)
    continue
  if prompt.lower() in ['退出','bye']:
    print('感谢您的支持，再见！')
    break
  else:
    messages.append({'role':'user','content':prompt})
    response = client.chat.completions.create(
      model='qwen3:4b',
      messages=messages,
      stream=False,
      tools=tools,
      )
    if response.choices[0].message.tool_calls:  
      print('模型决定调用工具')
      messages.append(response.choices[0].message)
      tool_call = response.choices[0].message.tool_calls[0]
      name = tool_call.function.name
      # print(f"函数名: {name}")
      product_name = json.loads(tool_call.function.arguments)['product_name']
      # print(f"参数: {product_name}")
      print('正在查询仓库')
      final_result = Connect_Sql.query_by_product_name(product_name)
      content = json.dumps({'product_name':product_name,'query_by_product_name':final_result},ensure_ascii=False)
      tool_calls_id = response.choices[0].message.tool_calls[0].id
      messages.append({'role':'tool', 'tool_call_id':tool_calls_id, 'content':content})
      print('查询完毕')
      messages.append({'role':'user','content':prompt})
      response = client.chat.completions.create(
      model='qwen3:4b',
      messages=messages,
      )
      

    
  print(response.choices[0].message.content)
  messages.append({'role':'assistant','content':response.choices[0].message.content})

    
    
      
